package com.situ.mall.web.controller;

import com.category.spi.model.CategoryTreeDTO;
import com.mall.common.util.JsonResult;
import com.mall.model.Product;
import com.situ.mall.web.service.CategoryFeignService;
import com.situ.mall.web.service.ProductFeignService;
import com.situ.mall.web.service.BrandFeignService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.situ.mallbrand.model.Brand;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;
import java.util.Map;

/**
 * 主页控制器
 */
@Slf4j
@Controller
public class MainController {

    @Autowired
    private ProductFeignService productFeignService;

    @Autowired
    private CategoryFeignService categoryFeignService;

    @Autowired
    private BrandFeignService brandFeignService;

    /**
     * 首页
     */
    @GetMapping({"/", "/index"})
    public String index(Model model) {
        try {
            // 1. 获取分类树数据（用于导航菜单）
            JsonResult<List<CategoryTreeDTO>> categoryResult = categoryFeignService.getCategoryTree(1);
            if (categoryResult != null && categoryResult.getData() != null) {
                model.addAttribute("categories", categoryResult.getData());
                log.info("获取到分类数据: {} 个", categoryResult.getData().size());
    }

            // 2. 获取热销商品数据
            JsonResult<Map<String, Object>> hotGoodsResult = productFeignService.getProducts(
                    null, // 不限制关键词 
                    null, // 不限制品牌
                    null, // 不限制分类
                    1,    // 只获取上架商品
                    1,    // 热销商品
                    1,    // 第一页
                    12    // 取12个商品
            );
            
            if (hotGoodsResult != null && hotGoodsResult.getData() != null) {
                Map<String, Object> data = hotGoodsResult.getData();
                @SuppressWarnings("unchecked")
                List<Product> hotGoods = (List<Product>) data.get("list");
                model.addAttribute("hotGoods", hotGoods);
                log.info("获取到热销商品数据: {} 个", hotGoods != null ? hotGoods.size() : 0);
    }

            // 3. 获取热门品牌数据（用于首页品牌展示）
            JsonResult<Page<Brand>> brandsResult = brandFeignService.list(
                    null, // 不限制关键词
                    1,    // 只获取启用的品牌
                    1,    // 第一页
                    8     // 取8个品牌
            );
            
            if (brandsResult != null && brandsResult.getData() != null) {
                Page<Brand> brandPage = brandsResult.getData();
                model.addAttribute("hotBrands", brandPage.getRecords());
                log.info("获取到热门品牌数据: {} 个", brandPage.getRecords().size());
    }

        } catch (Exception e) {
            log.error("首页数据加载失败", e);
            // 即使加载失败也要显示页面，只是没有数据
            // 设置默认的空数据，避免模板渲染错误
            model.addAttribute("categories", java.util.Collections.emptyList());
            model.addAttribute("hotGoods", java.util.Collections.emptyList());
            model.addAttribute("hotBrands", java.util.Collections.emptyList());
        }
        
        return "index";
    }

    /**
     * 错误页面
     */
    @GetMapping("/error")
    public String error(Model model, Exception ex) {
        if (ex != null) {
            model.addAttribute("error", ex.getMessage());
            log.error("页面出现错误: {}", ex.getMessage());
        } else {
            model.addAttribute("error", "系统出现异常，请稍后重试");
        }
        return "error";
    }
} 